package com.bblocks.common.anti_reptile.rule;


import com.bblocks.common.anti_reptile.constant.RuleTypeEnum;
import com.bblocks.common.anti_reptile.module.IpUserNumVo;
import com.bblocks.common.anti_reptile.module.RuleStatVO;
import com.bblocks.common.anti_reptile.module.RuleVO;
import lombok.NonNull;

/**
 * <p>Project: bb-anti-reptile - RuleData</p>
 * <p>描述：规则数据
 * 1、目前主要是用户和ip 接口访问规则数据
 * 2、保存规则数据
 * </p>
 *
 * @Author Zhao [125043150@qq.com]
 * @Date 2024/3/24 11:39
 * @Version 1.0
 * @since 8
 */
public interface RuleData {
    /**
     * redis存储key-url频率
     */
    public static final String URL_RATE = "URL_RATE";
    /**
     * redis存储key-ip用户数
     */
    public static final String IP_USERS = "IP_USERS";
    /**
     * 目标同步天，yyyyMMdd
     */
    public static final String SYNC_DAY = "SYNC_DAY";
    /**
     *  同步锁
     */
    public static final String SYNC_LOCK = "SYNC_LOCK";


    /**
     * 提取规则(可能为空-则无规则-原则不执行限制)
     * @param ruleTypeEnum 仅限 RuleTypeEnum.IP_PLUS 和 RuleTypeEnum.USER_PLUS
     * @param url
     * @param ip ruleTypeEnum=RuleTypeEnum.IP_PLUS 需要
     * @return
     */
    RuleVO theRule(@NonNull RuleTypeEnum ruleTypeEnum, @NonNull String url, String ip);

    /**
     * 保存url规则
     * @param ruleStatVO
     */
    void saveRule(RuleStatVO ruleStatVO);

    /**
     * 保存ip用户数量(不清数据)
     * @param userNoVo
     */
    void saveIpUser(IpUserNumVo userNoVo);
}
